package com.dmy.ui;

import com.dmy.config.GameConfig;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

/**
 * 敌军坦克
 */
public class EnemyTank extends Tank {


    private static int number = 1;
    // 保存自身实例
    private EnemyTank tankInstance;
    // 保存地图画笔组件
    private JComponent component;
    // 定时器 用于敌人的随机运动 和随机发射子弹
    private Timer timer;

    // 获取颜色
    public Color getColor0() {
        Color color;
        do {
            color = new Color(new Random().nextInt(200) + 56, new Random().nextInt(200) + 56, new Random().nextInt(200) + 56);
        } while (color.equals(Color.black));
        return color;
    }

    public EnemyTank(JComponent panel) {
        super(new Random().nextInt(GameConfig.WINDOW_WIDTH - 50), new Random().nextInt(140) + 11, -1);
        this.setColor(getColor0());
        component = panel;
        tankInstance = this;
        // 随机移动
        randomMove();
        // 随机发射子弹
        randomAttack();
    }


    /**
     * 随机发射
     */
    private void randomAttack() {


        new Timer(500, new ActionListener() {
            private long timeout = 0; // 超时时间
            private long randomNum = 0; // 随机子弹数量

            @Override
            public void actionPerformed(ActionEvent e) {
                // 装弹 限制最少3秒以后才可以填装 每次添弹随机1-3 颗
                if (System.currentTimeMillis() - timeout >= 0) {
                    timeout = System.currentTimeMillis() + new Random().nextInt(8000) + 3000;
                    randomNum = new Random().nextInt(3) + 1;
                }
                // 发射 有子弹的情况下才可以发射 发射一次子弹减一
                if (randomNum != 0) {
                    tankInstance.attack(component);
                    randomNum--;
                }
            }
        }).start();
    }

    private void randomMove() {
        timer = new Timer(new Random().nextInt(100) + 100, new ActionListener() {
            private long dueTo = 0;
            private byte nowNum = -1;

            // 同上原理
            @Override
            public void actionPerformed(ActionEvent e) {
                if (System.currentTimeMillis() >= dueTo) {
                    dueTo = System.currentTimeMillis() + new Random().nextInt(2000) + 1500;
                    nowNum = (byte) new Random().nextInt(4);
                }
                // 利用随机数 生成0-3的数字 控制坦克移动 且限制坦克方向改变的时间最少1.5秒以上
                switch (nowNum) {
                    case 0:
                        tankInstance.moveUp(component);
                        break;
                    case 1:
                        tankInstance.moveDown(component);
                        break;
                    case 2:
                        tankInstance.moveLeft(component);
                        break;
                    case 3:
                        tankInstance.moveRight(component);
                        break;
                }
            }
        });
        timer.start();
    }

}
